import { defineStore } from 'pinia';

export const useUserStore = defineStore('user', {
	state: () => {
		return {
			uInfo: null,
		};
	},

	getters: {
		// 获取登录用户信息
		GetUInfo(state) { return state.uInfo || uni.getStorageSync('uInfo'); },
	},

	actions: {
		/**
		 * 登录结果设置函数
		 * 该函数用于更新用户信息，并将更新后的信息存储在本地缓存中。
		 * @param {Object} result - 登录接口返回的结果对象，包含需要更新的用户信息。
		 */
		loginSetResult(result) {
			// 使用Object.assign方法合并当前的用户信息对象和新的登录结果，以更新用户信息
			this.uInfo = Object.assign({}, this.GetUInfo, result);
			// 将更新后的用户信息存储在本地缓存中，以便后续使用
			uni.setStorageSync('uInfo', this.uInfo);
		},

		/**
		 * 注销当前用户。
		 * 该方法将清空用户和应用信息，以及登录状态，并从本地存储中删除相关令牌和过期时间，
		 * 以确保用户安全退出登录状态。
		 */
		logout() {
			// 清空用户信息
			this.uInfo = null;
			// 清空应用信息
			this.aInfo = null;
			// 设置登录状态为未登录
			this.hasLogin = false;
			// 从本地存储中删除用户信息
			uni.removeStorageSync('aInfo');
			// 从本地存储中删除应用信息
			uni.removeStorageSync('uInfo');
			// 从本地存储中删除应用信息
			uni.removeStorageSync('pInfo');
			// 从本地存储中删除登录状态信息
			uni.removeStorageSync('hasLogin');
			// 从本地存储中删除用户令牌
			uni.removeStorageSync('uni_id_token');
			// 将令牌过期时间设置为0，表示已失效
			uni.setStorageSync('uni_id_token_expired', 0);
		}
	},
});